#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
可视化功能演示脚本
展示MCP路径查询工具的各种可视化功能
"""

import sys
import os
import base64
from datetime import datetime

# 添加当前目录到路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from main import query_route, G

def demo_base64_visualization():
    """演示base64可视化功能"""
    print("\n" + "="*60)
    print("📊 Base64可视化演示")
    print("="*60)
    
    result = query_route("北京", "广州", "auto", "base64")
    
    print(f"🚀 算法: {result['algorithm']}")
    print(f"🗺️  路径: {' → '.join(result['path'])}")
    print(f"📏 距离: {result['distance']:.1f}km")
    print(f"📋 摘要: {result['route_summary']}")
    
    if result['visualization']:
        vis = result['visualization']
        print(f"\n🎨 可视化信息:")
        print(f"   类型: {vis['type']}")
        print(f"   格式: {vis['format']}")
        print(f"   数据长度: {len(vis['data'])} 字符")
        print(f"   数据预览: {vis['data'][:80]}...")
        
        # 可选：保存base64为文件
        save_base64 = input("\n💾 是否保存base64图片为文件? (y/n): ").lower().strip()
        if save_base64 == 'y':
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            filename = f"demo_base64_{timestamp}.png"
            
            # 解码并保存
            image_data = base64.b64decode(vis['data'])
            with open(filename, 'wb') as f:
                f.write(image_data)
            print(f"✅ 图片已保存为: {filename}")

def demo_file_visualization():
    """演示文件可视化功能"""
    print("\n" + "="*60)
    print("📁 文件可视化演示")
    print("="*60)
    
    result = query_route("重庆", "昆明", "dijkstra", "file")
    
    print(f"🚀 算法: {result['algorithm']}")
    print(f"🗺️  路径: {' → '.join(result['path'])}")
    print(f"📏 距离: {result['distance']:.1f}km")
    print(f"📋 摘要: {result['route_summary']}")
    
    if result['visualization']:
        vis = result['visualization']
        print(f"\n🎨 可视化信息:")
        print(f"   类型: {vis['type']}")
        print(f"   格式: {vis['format']}")
        print(f"   文件路径: {vis['path']}")
        print(f"   文件存在: {'✅' if os.path.exists(vis['path']) else '❌'}")
        
        if os.path.exists(vis['path']):
            file_size = os.path.getsize(vis['path'])
            print(f"   文件大小: {file_size:,} 字节")

def demo_algorithm_comparison():
    """演示不同算法的比较"""
    print("\n" + "="*60)
    print("⚖️  算法比较演示")
    print("="*60)
    
    start, end = "天津", "南宁"
    algorithms = ["floyd", "dijkstra", "auto"]
    
    print(f"🎯 测试路径: {start} → {end}")
    print("\n" + "-"*50)
    
    for algo in algorithms:
        result = query_route(start, end, algo, "none")
        print(f"\n🔧 算法: {algo}")
        print(f"   实际使用: {result['algorithm']}")
        print(f"   路径: {' → '.join(result['path'])}")
        print(f"   距离: {result['distance']:.1f}km")
        print(f"   路径长度: {len(result['path'])} 个城市")

def demo_network_info():
    """显示网络信息"""
    print("\n" + "="*60)
    print("🌐 网络信息")
    print("="*60)
    
    cities = list(G.nodes())
    edges = list(G.edges())
    
    print(f"🏙️  城市数量: {len(cities)}")
    print(f"🛣️  连接数量: {len(edges)}")
    print(f"\n📍 包含的城市:")
    
    # 按区域分组显示城市
    cities_sorted = sorted(cities)
    for i, city in enumerate(cities_sorted, 1):
        print(f"   {i:2d}. {city}", end="")
        if i % 4 == 0:  # 每4个城市换行
            print()
        else:
            print("\t", end="")
    
    if len(cities_sorted) % 4 != 0:
        print()  # 最后换行
    
    # 显示一些统计信息
    degrees = [G.degree(city) for city in cities]
    print(f"\n📊 连接统计:")
    print(f"   平均连接数: {sum(degrees)/len(degrees):.1f}")
    print(f"   最大连接数: {max(degrees)}")
    print(f"   最小连接数: {min(degrees)}")

def main():
    """主演示函数"""
    print("🎉 物流配送最优路线规划服务 - 可视化功能演示")
    print("🔧 优化版本：支持实时可视化生成")
    
    # 显示网络信息
    demo_network_info()
    
    # 演示各种功能
    demo_base64_visualization()
    demo_file_visualization()
    demo_algorithm_comparison()
    
    print("\n" + "="*60)
    print("✨ 演示完成！")
    print("="*60)
    print("\n💡 主要改进:")
    print("   ✅ 每次查询自动生成可视化图")
    print("   ✅ 支持base64和文件两种输出格式")
    print("   ✅ 高清图片输出（300 DPI）")
    print("   ✅ 智能路径高亮显示")
    print("   ✅ 完整的中文支持")
    print("   ✅ 内存优化（自动关闭图形）")
    
    print("\n🚀 使用建议:")
    print("   📱 移动端/Web应用: 使用base64格式")
    print("   💻 桌面应用/报告: 使用file格式")
    print("   ⚡ 高性能场景: 使用none格式")

if __name__ == "__main__":
    main()